#include<bits/stdc++.h>
using namespace std;
class dsu{
  private:
    vector<int> f;
  public:
    dsu(int n){
      f.resize(n);
      iota(f.begin(),f.end(),0);
    }
    int leader(int x){
      return x==f[x]?x:f[x]=leader(f[x]);
    }
    inline bool merge(int u,int v){
      if((u=leader(u))!=(v=leader(v)))
        return f[u]=v,true;
      return false;
    }
};
int main(){
  freopen("circ.in","r",stdin);
  freopen("circ.out","w",stdout);
  ios::sync_with_stdio(false);
  cin.tie(0); cout.tie(0);
  int t; cin>>t;
  while(t--){
    int n,m,c=0; cin>>n>>m;
    vector<vector<int> > g(n);
    dsu d(n);
    vector<int> dg(n);
    for(int i=0;i<m;i++){
      int u,v; cin>>u>>v;
      c+=d.merge(u,v),dg[v]++;
      g[u].emplace_back(v);
    }
    if(m==n-1&&c==m){
      queue<int> q;
      vector<int> f(n);
      for(int i=0;i<n;i++)
        if(!dg[i])q.emplace(i),f[i]=1;
      while(!q.empty()){
        int u=q.front(); q.pop();
        for(int i:g[u]){
          f[i]=max(f[i],f[u]+1);
          if(!--dg[i])q.emplace(i);
        }
      }
      cout<<n+1-*max_element(f.begin(),f.end())<<'\n';
      continue;
    }
    cout<<"-1\n";
  }
  return 0;
}